// ! 应用的根模块
// * 是用来对外暴露当前模块，以及该模块下需要用到的controller和service都需要在module中引入并注册，最终在app.module中集中引入
// * 需要用 @Module 装饰器进行装饰，用于处理其他类的引用和共享

// 导入NestJS框架的Module装饰器，用于定义模块的元数据
import { Module } from "@nestjs/common";
// 导入AppController类，它是应用程序的控制器，负责处理请求和发送响应
import { AppController } from "./app.controller";
// 导入AppService类，它是应用程序的服务层，负责业务逻辑的实现
import { AppService } from "./app.service";

import { MongooseModule } from "@nestjs/mongoose";
import { TypeOrmModule } from "@nestjs/typeorm";

import { LoginModule } from "./login/login.module";
import { EventModule } from "./gateway/event.module";
import { DeviceModule } from "./device/device.module";
import { FileModule } from "./file/file.module";
import { SystemModule } from "./system/system.module";
import { ChartsModule } from "./charts/charts.module";

// 使用@Module装饰器来注解AppModule类，标识它为一个NestJS模块
@Module({
  imports: [
    MongooseModule.forRoot("mongodb://localhost:27017/nest-panghu"),
    TypeOrmModule.forRoot({
      type: "mongodb", // 数据库类型
      host: "localhost", // 数据库主机名
      port: 27017, // 数据库端口
      // username: "root", // 数据库用户名
      // password: "root", // 数据库密码
      database: "nest-panghu", // 数据库名
      entities: [__dirname + "/**/*.entity{.ts,.js}"], // 实体位置
      synchronize: true, // 是否自动同步数据库结构，生产环境慎用
    }),
    LoginModule,
    EventModule,
    DeviceModule,
    FileModule,
    SystemModule,
    ChartsModule,
  ], // 在这个数组中列出当前模块所依赖的其他模块
  controllers: [AppController], // 在这个数组中列出当前模块所包含的控制器 通过@Module 装饰器将元数据附加到模块类中 Nest 可以轻松反射（reflect）出哪些控制器（controller）必须被安装
  providers: [AppService], // 在这个数组中列出当前模块所包含的服务提供者
})
// 导出AppModule类，使其可以在其他文件中被导入和使用
export class AppModule {}
